<?php
/**
 * Model de Estadisticas.
 *
 *
 * @filesource          
 * @copyright		
 * @link		http://www.pragmatia.com Pragmatia
 * @package		datagro
 * @subpackage	app.models
 * @version     1.1
 * @license		http://www.opensource.org/licenses/mit-license.php The MIT License
 * @author      Martin Radosta <mradosta@pragmatia.com>
 */


/**
 * Clase Estadistica
 *
 * @package	    datagro
 * @subpackage	app.models
 */
define('VALID_DATETIME', '/(0[1-9]|[12][0-9]|3[01])[\/.](0[1-9]|1[012])[\/.](19|20)\d\d\s{1}([0-1][0-9]|[2][0-3]):([0-5][0-9])|^$/');

class Estadistica extends AppModel {

    var $name = 'Estadistica'; 
	var $useTable = false;

	function porEquipo($opciones) {
		$sql = "
			select		Equipo.id as Id,
						Equipo.nombre as Nombre, 
						count(1) as CantidadSucesos, 
						sum(Suceso.kilogramos) as TotalKilogramos
			from 		sucesos Suceso, equipos Equipo
			where 		1=1
			and			Equipo.id = Suceso.equipo_id";

		if(!empty($opciones['desde'])) {
			$sql .= "	and Suceso.fecha_hora >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
		}

		if(!empty($opciones['hasta'])) {
			$sql .= "	and Suceso.fecha_hora <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
		}

		$sql .= "		group by	1";
		
		$resultado = $this->query($sql);
		//d($resultado);
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				$r[$v['Equipo']['Id']] = array(	"Equipo"=>$v['Equipo']['Nombre'],
												"CantidadSucesos"=>$v[0]['CantidadSucesos'],
												"TotalKilogramos"=>$v[0]['TotalKilogramos']);
			}
		}
		return $r;
		//d($r);
	}

	function porUsuario($opciones) {
	
		$sql = "
			select		Id,
						Usuario,
						Alta,
						count(1) as Ingresos
			from 		(
			select		Usuario.id as Id,
						Usuario.nombre as Usuario,
						Usuario.created as Alta
			from 		auditorias Auditoria
			left join 	usuarios Usuario on (Usuario.id = Auditoria.usuario_id and Usuario.grupo_id = 4)
			left join 	alertas_clientes AlertasCliente on (AlertasCliente.usuario_id = Usuario.id)
			where 		1=1
			and			Auditoria.tipo = 20
			and			Auditoria.accion = 'login'
			";

		if(!empty($opciones['desde'])) {
			$sql .= "	and Auditoria.fecha_hora >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
		}

		if(!empty($opciones['hasta'])) {
			$sql .= "	and Auditoria.fecha_hora <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
		}

		$sql .= "	group by	Usuario.id,
								Usuario.nombre,
								Usuario.created)
					as Usuario
						group by 1, 2, 3";

		$resultado = $this->query($sql);
		$r = array();
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				$r[$v['Usuario']['Id']] = array(	"Usuario"=>$v['Usuario']['Usuario'],
													"Alta"=>$v['Usuario']['Alta'],
													"Clientes"=>0,
													"Ingresos"=>$v['0']['Ingresos']);
			}
		}

		$sql = "
			select		Usuario.usuario_id as Id,
						count(1) as Cantidad
			from		usuarios Usuario
			where 		1=1
			and			Usuario.grupo_id = 4
			and			Usuario.usuario_id > 0
			group by	1";

		$resultado = $this->query($sql);
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				$r[$v['Usuario']['Id']]['Clientes'] = $v[0]['Cantidad'];
			}
		}

		/*
		* recorro r 
		*/
		foreach($r as $usuario_id=>$value) {
			/*
			* busca la cantidad de sims asociadas al cliente del usuario
			*/
			$sql = "select	Cliente.id,
							Cliente.nombre,
							count(1) as cantidad
					from	sims Sim,
							usuarios Cliente
					where	Sim.usuario_id = Cliente.id
					and		Cliente.usuario_id = ".$usuario_id."
					group by 1,2";
			$resultado = $this->query($sql);
			if(!empty($resultado)) {
				foreach($resultado as $v) {
					$r[$usuario_id]['Sim'][$v['Cliente']['id']]['nombre'] = $v['Cliente']['nombre'];
					$r[$usuario_id]['Sim'][$v['Cliente']['id']]['cantidad'] = $v[0]['cantidad'];
				}
			}
		}

		/*
		* recorro r 
		*/
		foreach($r as $usuario_id=>$value) {
			/*
			* busca la cantidad de alertas creadas
			*/
			$sql = "select	count(usuario_id) as cantidad_alertas_creadas
					from	alertas_clientes
					where	usuario_id=".$usuario_id;

			if(!empty($opciones['desde'])) {
				$sql .= "	and fecha_vigencia_desde >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
			}

			if(!empty($opciones['hasta'])) {
				$sql .= "	and fecha_vigencia_desde <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
			}

			$resultado = $this->query($sql);
			if(!empty($resultado)) {
				foreach($resultado as $v) {
					$r[$usuario_id]['Alertas']['Creadas'] = $v[0]['cantidad_alertas_creadas'];
				}
			}
		}

		/*
		* recorro r 
		*/
		foreach($r as $usuario_id=>$value) {
			/*
			* busca la cantidad de alertas enviadas
			*/
			$sql = "select	count(usuario_id) as cantidad_alertas_enviadas
					from	alertas
					where	usuario_id=".$usuario_id;

			if(!empty($opciones['desde'])) {
				$sql .= "	and fecha >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
			}

			if(!empty($opciones['hasta'])) {
				$sql .= "	and fecha <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
			}

			$resultado = $this->query($sql);
			if(!empty($resultado)) {
				foreach($resultado as $v) {
					$r[$usuario_id]['Alertas']['Enviadas'] = $v[0]['cantidad_alertas_enviadas'];
				}
			}
		}
		//d($r);
		return $r;
	}


	function porCliente($opciones) {
		$sql = "
			select		Usuario.nombre as cliente,
						Usuario.id as cliente_id,
						UsuarioPadre.nombre as usuario,
						UsuarioPadre.id as usuario_id,
						case
							when ((Usuario.fecha_hora_desde <> '0000-00-00 00:00:00' or Usuario.fecha_hora_hasta <> '0000-00-00 00:00:00') and Usuario.numero_asociado > 0) then 'Por Numero-Temporal'
							when (Usuario.fecha_hora_desde <> '0000-00-00 00:00:00' or Usuario.fecha_hora_hasta <> '0000-00-00 00:00:00') then 'Temporal'
							when Usuario.numero_asociado > 0 then 'Por Numero'
							else 'Sin Condicion'
						end as condicion,
						count(1) as ingresos
			from 		auditorias Auditoria,
						usuarios Usuario,
						usuarios UsuarioPadre
			where 		1=1
			and			Auditoria.tipo = 20
			and			Usuario.id = Auditoria.usuario_id
			and			UsuarioPadre.id = Usuario.usuario_id
			group by	1,2,3,4,5
			order by	1";
		$resultado = $this->query($sql);
		$r = array();
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				$r[] = array(	"cliente"=>$v['Usuario']['cliente'],
								"cliente_id"=>$v['Usuario']['cliente_id'],
								"usuario"=>$v['UsuarioPadre']['usuario'],
								"usuario_id"=>$v['UsuarioPadre']['usuario_id'],
								"condicion"=>$v['0']['condicion'],
								"ingresos"=>$v['0']['ingresos']);
			}
		}
		return $r;
	}


	function resumida($opciones) {
		
		$r = array();

		$sql = "select 	Usuario.grupo_id as tipo,
						count(1) as ingresos
			from 		auditorias Auditoria,
						usuarios Usuario
			where 		1=1
			and			Auditoria.tipo = 20
			and			Usuario.id = Auditoria.usuario_id
			and			Usuario.grupo_id in (3,4)";

		if(!empty($opciones['desde'])) {
			$sql .= "	and Auditoria.fecha_hora >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
		}

		if(!empty($opciones['hasta'])) {
			$sql .= "	and Auditoria.fecha_hora <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
		}

		$sql .= "	group by	1";

		$resultado = $this->query($sql);
		$r['TotalIngresos']['Cliente'] = 0;
		$r['TotalIngresos']['Usuario'] = 0;

		if(!empty($resultado)) {
			foreach($resultado as $v) {
				if($v['Usuario']['tipo'] == "3") {
					$r['TotalIngresos']['Cliente'] = $v['Usuario']['tipo'];
				}
				
				if($v['Usuario']['tipo'] == "4") {
					$r['TotalIngresos']['Usuario'] = $v['Usuario']['tipo'];
				}
			}
		}		
		
		$sql = "
			select		Dominio.valor, count(1)  as TotalAlertas
			from		alertas Alerta,
						alertas_notificaciones AlertasNotificacion, 
						dominios Dominio
			where 		1=1
			and			Dominio.id = AlertasNotificacion.notificacion
			and			Alerta.id = AlertasNotificacion.alerta_id";

		if(!empty($opciones['desde'])) {
			$sql .= "	and Alerta.fecha >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
		}

		if(!empty($opciones['hasta'])) {
			$sql .= "	and Alerta.fecha <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
		}

		$sql .= "	group by	Dominio.valor";

		$resultado = $this->query($sql);
		
		$r['TotalAlertas']['Email'] = 0;
		$r['TotalAlertas']['Sms'] = 0;
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				if($v['Dominio']['valor'] == "Email") {
					$r['TotalAlertas']['Email'] = $v[0]['TotalAlertas'];
				}
				
				if($v['Dominio']['valor'] == "Sms") {
					$r['TotalAlertas']['Sms'] = $v[0]['TotalAlertas'];
				}
			}
		}
				
		$sql = "
			select		Grupo.nombre,
						count(1) as Total
			from		usuarios Usuario,
						grupos Grupo
			where 		1=1
			and			Usuario.grupo_id = Grupo.id
			and			Usuario.grupo_id in (3, 4)
			group by	Grupo.nombre";

		$resultado = $this->query($sql);
		$r['TotalClientes'] = 0;
		$r['TotalUsuarios'] = 0;
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				if($v['Grupo']['nombre'] == "Clientes") {
					$r['TotalClientes'] = $v[0]['Total'];
				}
				
				if($v['Grupo']['nombre'] == "Usuarios") {
					$r['TotalUsuarios'] = $v[0]['Total'];
				}
			}
		}
		
		$sql = "
			select		count(1) as TotalEquipos
			from		equipos Equipo
			where 		1=1";

		$resultado = $this->query($sql);
		$r['TotalEquipos'] = 0;
		if(!empty($resultado)) {
			$r['TotalEquipos'] = $resultado[0][0]['TotalEquipos'];
		}
		
		$sql = "
			select		Dominio.valor, count(1)  as TotalSucesos, sum(kilogramos) as TotalKilogramos
			from		sucesos Suceso,
						dominios Dominio
			where 		1=1
			and			Dominio.id = Suceso.tipo";

		if(!empty($opciones['desde'])) {
			$sql .= "	and Suceso.fecha_hora >= str_to_date('".$opciones['desde']."','%Y-%m-%d %H:%i:%s')";
		}

		if(!empty($opciones['hasta'])) {
			$sql .= "	and Suceso.fecha_hora <= str_to_date('".$opciones['hasta']."','%Y-%m-%d %H:%i:%s')";
		}

		$sql .= "	group by	Dominio.valor";

		$resultado = $this->query($sql);
		$r['TotalSucesos']['Carga'] = 0;
		$r['TotalSucesos']['Cierre'] = 0;
		$r['TotalSucesos']['Descarga'] = 0;
		$r['TotalKilogramos']['Carga'] = 0;
		$r['TotalKilogramos']['Cierre'] = 0;
		$r['TotalKilogramos']['Descarga'] = 0;
		if(!empty($resultado)) {
			foreach($resultado as $v) {
				if($v['Dominio']['valor'] == "Carga") {
					if(isset($v[0]['TotalSucesos']))
						$r['TotalSucesos']['Carga'] = $v[0]['TotalSucesos'];
					if(isset($v[0]['TotalKilogramos']))
						$r['TotalKilogramos']['Carga'] = $v[0]['TotalKilogramos'];
				}
				if($v['Dominio']['valor'] == "Descarga") {
					if(isset($v[0]['TotalSucesos']))
						$r['TotalSucesos']['Descarga'] = $v[0]['TotalSucesos'];
					if(isset($v[0]['TotalKilogramos']))
						$r['TotalKilogramos']['Descarga'] = $v[0]['TotalKilogramos'];
					
				}
				if($v['Dominio']['valor'] == "Cierre") {
					if(isset($v[0]['TotalSucesos']))
						$r['TotalSucesos']['Cierre'] = $v[0]['TotalSucesos'];
					if(isset($v[0]['TotalKilogramos']))
						$r['TotalKilogramos']['Cierre'] = $v[0]['TotalKilogramos'];
				}
			}
		}
		return $r;
	}
	
}

?>